/*
 * Copyright (C) 2015 Pankaj
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.codeforwin.projects.onscreenkeyboard;

import java.awt.Color;
import java.awt.Component;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Insets;
import java.awt.Toolkit;
import static java.awt.event.KeyEvent.*;
import java.awt.event.MouseEvent;

import java.util.ArrayList;

import javax.swing.JLabel;

import javax.swing.JPanel;

/**
 *
 * @author Pankaj
 */
public class KeyboardUI extends javax.swing.JFrame {

    private final static String[] FN_KEY_OFF_TEXT = new String[]{
        "<html>~<br />&nbsp;&nbsp;`</html>", "<html>!<br />&nbsp;&nbsp;1</html>", "<html>@<br />&nbsp;&nbsp;2</html>",
        "<html>#<br />&nbsp;&nbsp;3</html>", "<html>$<br />&nbsp;&nbsp;4</html>", "<html>%<br />&nbsp;&nbsp;5</html>",
        "<html>^<br />&nbsp;&nbsp;6</html>", "<html>&<br />&nbsp;&nbsp;7</html>", "<html>*<br />&nbsp;&nbsp;8</html>",
        "<html>(<br />&nbsp;&nbsp;9</html>", "<html>)<br />&nbsp;&nbsp;0</html>", "<html>_<br />&nbsp;&nbsp;-</html>",
        "<html>+<br />&nbsp;&nbsp;=</html>"
    };
    private final static String[] FN_KEY_OFF_VK = new String[]{
        "0xC0", "0x31", "0x32", "0x33", "0x34", "0x35", "0x36", "0x37", "0x38", "0x39", "0x30", "0x2D", "0x3D"
    };

    private final static String[] FN_KEY_ON_TEXT = new String[]{
        "Esc", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12"
    };

    private final static String[] FN_KEY_ON_VK = new String[]{
        "0x1B", "0x70", "0x71", "0x72", "0x73", "0x74", "0x75", "0x76", "0x77", "0x78", "0x79", "0x7A", "0x7B"
    };
    
    
    private final static Color SELECTED_COLOR = new Color(-15304792); //Dark Sky blue
    private final static Color DEFAULT_ENTER_COLOR = Color.GRAY;
    private final static Color DEFAULT_KEY_COLOR = new Color(0xE7E7E7);//new Color(-13421773);//Color.GRAY;
    private final static Font DEFAULT_KEY_FONT = new Font("文泉驿等宽微米黑", Font.BOLD, 18);
     private final static Font DEFAULT_KEY_FONT_SMALL = new Font("文泉驿等宽微米黑", 0, 14);
    private final static Color DEFAULT_KEY_FOREGROUND = new Color(0x000000);
    private static boolean IS_FUNCTION_KEY_PRESSED = false;
    //private final int WIDTH_WITHOUT_NUMPAD;
    //private final int WIDTH_WITH_NUMPAD;
    private final ArrayList<JLabel> alphabetKeys;
    private final ArrayList<JLabel> functionKeys;
    private int displayX;
    private int displayY;
    
    /**
     * Creates new GUI form KeyboardUI
     */
    public KeyboardUI() {
        initComponents();
        alphabetKeys = new ArrayList<>();
        functionKeys = new ArrayList<>();
        int high = getHeight();
        int width = getWidth();
        //WIDTH_WITHOUT_NUMPAD = alphabetPanel.getWidth() + optionPanel.getWidth() + 15;
        com.sun.awt.AWTUtilities.setWindowOpaque(this, false);// 设置窗体透明
        com.sun.awt.AWTUtilities.setWindowOpacity(this, 0.8f);
        
        initKeys();
        setIcon();
        setLocationToBottom();
    }
    public void display(int y,int height)
    {
        int ypos= y+height;        
        if (ypos>displayY) {
            ypos = y-getHeight();
        }
        setLocation(displayX, ypos);
        setVisible(true);
    }
   
    private void initKeys() {
        JPanel[] jp = {jPanelKey1,jPanelKey2,jPanelKey3,jPanelKey4};
        for( JPanel jpNow:jp)
        {
        for(Component component : jpNow.getComponents()) {
            try {
                JLabel key = (JLabel)component;
                
                String name = key.getText();
                
                if(name.length()==1) {
                    alphabetKeys.add(key);
                }
            } catch(ClassCastException ex) {
                
            }
        }
        }
        
        for(Component component : this.functionPanel.getComponents()) {
            try {
                JLabel key = (JLabel) component;
                
                functionKeys.add(key);
            } catch(ClassCastException ex) { }
        }
        functionKeys.remove(keybackspace);
    }
    
    private void setIcon() {
        //setIconImage((new ImageIcon(getClass().getResource("/com/codeforwin/projects/onscreenkeyboard/vk.png"))).getImage());
    }
        
    
    //<editor-fold defaultstate="collapsed" desc="GUI Helper functions">
    /**
     * Sets the default location of the Onscreen Keyboard on bottom of the screen 
     * just above the taskbar.
     */
    private void setLocationToBottom() {
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Insets inset = Toolkit.getDefaultToolkit().getScreenInsets(getGraphicsConfiguration());
        
        int workingScreen = screenSize.height - inset.bottom;
        
        int width = (screenSize.width - getWidth()) / 2; //Positions horizontally to middle of screen
        int height = workingScreen - getHeight(); //Positions vertically just above the taskbar
        
        setLocation(width, height);
        displayX = width;
        displayY = height;
    }
        
    /**
     * Performs a key press event on the specific key. Sends a key pressed event 
     * to the current foreground application.
     * @param evt 
     */
    private void keyPressed(MouseEvent evt) {
        JLabel key = (JLabel)evt.getSource();
        key.setBackground(SELECTED_COLOR);
    }
    
    /**
     * Releases a key that was pressed. Sends a key release event to the current
     * foreground application.
     * @param evt 
     */
    private void keyReleased(MouseEvent evt) {
        JLabel key = (JLabel)evt.getSource();
        key.setBackground(DEFAULT_KEY_COLOR);
    }
    
    /**
     * Performs a mouse click event on the key. Mouse click generally send a key associated
     * with the source of the event object to the currently focusable foreground application.
     * @param evt 
     */
    private void keyClicked(MouseEvent evt) {
        JLabel key = (JLabel)evt.getSource();           //Source clicked key.
        int keycode = Integer.decode(key.getName());    //Virtual key code associated with the key
        boolean specialkey = false;
        
        /**
         * Check for special keys(e.g. CapsLock, NumLock, Shift key). Perform special
         * actions on special keys click such as pressing, or releasing a pressed key.
         */
        switch(keycode) {
            case VK_SHIFT:
                if (Keyboard.isShiftPressed()) 
                    Keyboard.releaseKey(VK_SHIFT);
                else 
                    Keyboard.pressKey(VK_SHIFT);
                specialkey = true;
                break;
            case VK_CONTROL:
                if (Keyboard.isCtrlPressed())
                    Keyboard.releaseKey(VK_CONTROL);
                else
                    Keyboard.pressKey(VK_CONTROL);
                specialkey = true;
                break;
            case VK_ALT:
                if(Keyboard.isAltPressed())
                    Keyboard.releaseKey(VK_ALT);
                else
                    Keyboard.pressKey(VK_ALT);
                specialkey = true;
                break;
            case VK_WINDOWS:
                if(Keyboard.isWinPressed())
                    Keyboard.releaseKey(VK_WINDOWS);
                else
                    Keyboard.pressKey(VK_WINDOWS);
                specialkey = true;
                break;
            case VK_CAPS_LOCK:
                Keyboard.typeKey(VK_CAPS_LOCK);
                specialkey = true;
                break;
            case VK_NUM_LOCK:
                Keyboard.typeKey(VK_NUM_LOCK);
                specialkey = true;
                break;
            case VK_SCROLL_LOCK:
                Keyboard.typeKey(VK_SCROLL_LOCK);
                specialkey = true;
                break;
            case 0xff: //Function key pressed
                IS_FUNCTION_KEY_PRESSED = !IS_FUNCTION_KEY_PRESSED;
                specialkey = true;
                break;
        }
        
        if(!specialkey) {
            Keyboard.typeKey(keycode);
            Keyboard.releaseAllSpecialKeys();
        }
        
        updateAlphabeticKeys();
        updateFunctionKeys();
        updateSpecialKeys();
    }
    
    /**
     * Performs a hover effect on the key button.
     * @param evt 
     */
    private void keyMouseEntered(MouseEvent evt) {
        JLabel source = (JLabel) evt.getSource();
        
        /**
         * Check if the current key is a special key or not.
         * Perform no hover effect if special keys(e.g. CapsLock, NumLock, Shift etc)
         * keys are pressed.
         */
        int keycode = Integer.decode(source.getName());
        switch(keycode) {
            case VK_SHIFT:
                if(Keyboard.isShiftPressed())
                    return;
                break;
            case VK_CONTROL:
                if(Keyboard.isCtrlPressed())
                    return;
                break;
            case VK_ALT:
                if(Keyboard.isAltPressed())
                    return;
                break;
            case VK_WINDOWS:
                if(Keyboard.isWinPressed())
                    return;
                break;
            case VK_CAPS_LOCK:
                if(Keyboard.isCapsLockOn())
                    return;
                break;
            case VK_NUM_LOCK:
                if(Keyboard.isNumLockOn())
                    return;
                break;
            case VK_SCROLL_LOCK:
                if(Keyboard.isScrollLockOn())
                    return;
                break;
            case 0xff: //If the function key is pressed
                if(IS_FUNCTION_KEY_PRESSED)
                    return;
        }
        
        source.setBackground(DEFAULT_ENTER_COLOR);
    }
    
    /**
     * Performs a hover effect on the key button.
     * @param evt 
     */
    private void keyMouseExited(MouseEvent evt) {
        JLabel source = (JLabel) evt.getSource();
        
        /**
         * Check if the current key is special key or not.
         * Perform no hover effect if the special keys(e.g. CapsLock, NumLock, Shift key etc)
         * are pressed.
         */
        int keycode = Integer.decode(source.getName());
        switch(keycode) {
            case VK_SHIFT:
                if(Keyboard.isShiftPressed())
                    return;
                break;
            case VK_CONTROL:
                if(Keyboard.isCtrlPressed())
                    return;
                break;
            case VK_ALT:
                if(Keyboard.isAltPressed())
                    return;
                break;
            case VK_WINDOWS:
                if(Keyboard.isWinPressed())
                    return;
                break;
            case VK_CAPS_LOCK:
                if(Keyboard.isCapsLockOn())
                    return;
                break;
            case VK_NUM_LOCK:
                if(Keyboard.isNumLockOn())
                    return;
                break;
            case VK_SCROLL_LOCK:
                if(Keyboard.isScrollLockOn())
                    return;
                break;
            case 0xff: //If the function key is pressed
                if(IS_FUNCTION_KEY_PRESSED)
                    return;
        }
        
        source.setBackground(DEFAULT_KEY_COLOR);
    }
    
    /**
     * Changes the text of the alphabetic keys. This function to be called on every 
     * shift or caps key press or release. This function changes the text of the
     * alphabetic keys to CAPS and to small according to the current status of the
     * Caps lock key and Shift key.
     */
    private void updateAlphabeticKeys() {
        boolean caps =  (Keyboard.isShiftPressed() && !Keyboard.isCapsLockOn()) || 
                        (!Keyboard.isShiftPressed() && Keyboard.isCapsLockOn());
        
        for(JLabel key : alphabetKeys) {
            if(caps)
                key.setText(key.getText().toUpperCase());
            else
                key.setText(key.getText().toLowerCase());
        }
    }
    
    /**
     * Changes the text of the function/numeric keys. This function is to be called
     * if the function key is clicked. 
     */
    private void updateFunctionKeys() {
        int i = 0;
        for(JLabel key : functionKeys) {
            if(IS_FUNCTION_KEY_PRESSED) {
                key.setText(FN_KEY_ON_TEXT[i]);
                key.setName(FN_KEY_ON_VK[i]);
            } else {
                key.setText(FN_KEY_OFF_TEXT[i]);
                key.setName(FN_KEY_OFF_VK[i]);
            }
            
            i++;
        }
    }
    
    /**
     * Changes the current state of the special keys(e.g. CapsLock, NumLock, Shift etc).
     * Sets whether the special keys pressed or not. If the special key is pressed 
     * then blue colored keys are shown else normal keys.
     */
    private void updateSpecialKeys() {
        if(Keyboard.isCapsLockOn())
            keycaps.setBackground(SELECTED_COLOR);
        else
            keycaps.setBackground(DEFAULT_KEY_COLOR);
        
//        if(Keyboard.isNumLockOn())
//            keynumlock.setBackground(SELECTED_COLOR);
//        else
//            keynumlock.setBackground(DEFAULT_KEY_COLOR);
        
        if(Keyboard.isScrollLockOn())
            keyscrolllock.setBackground(SELECTED_COLOR);
        else
            keyscrolllock.setBackground(DEFAULT_KEY_COLOR);
        
        if(Keyboard.isShiftPressed()) {
            keyshiftl.setBackground(SELECTED_COLOR);
            keyshiftr.setBackground(SELECTED_COLOR);
        } else {
            keyshiftl.setBackground(DEFAULT_KEY_COLOR);
            keyshiftr.setBackground(DEFAULT_KEY_COLOR);
        }
        
        if(Keyboard.isCtrlPressed()) {
            keyctrl1.setBackground(SELECTED_COLOR);
            keyctrl2.setBackground(SELECTED_COLOR); 
        } else {
            keyctrl1.setBackground(DEFAULT_KEY_COLOR);
            keyctrl2.setBackground(DEFAULT_KEY_COLOR);
        }
        
        if(Keyboard.isAltPressed()) {
            keyalt.setBackground(SELECTED_COLOR);
            keyaltgr.setBackground(SELECTED_COLOR);
        } else {
            keyalt.setBackground(DEFAULT_KEY_COLOR);
            keyaltgr.setBackground(DEFAULT_KEY_COLOR);
        }
        
        if(Keyboard.isWinPressed())
            keywin.setBackground(SELECTED_COLOR);
        else
            keywin.setBackground(DEFAULT_KEY_COLOR);
        
        if(IS_FUNCTION_KEY_PRESSED)
            keyfn.setBackground(SELECTED_COLOR);
        else
            keyfn.setBackground(DEFAULT_KEY_COLOR);
    }
    
    private void updateNumpadKeys() {
        if(Keyboard.isNumLockOn()) {
            
        }
    }
    
    //</editor-fold>

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        mainPanel = new javax.swing.JPanel();
        functionPanel = new javax.swing.JPanel();
        keybackquote = new javax.swing.JLabel();
        key1 = new javax.swing.JLabel();
        key2 = new javax.swing.JLabel();
        key3 = new javax.swing.JLabel();
        key4 = new javax.swing.JLabel();
        key5 = new javax.swing.JLabel();
        key6 = new javax.swing.JLabel();
        key7 = new javax.swing.JLabel();
        key8 = new javax.swing.JLabel();
        key9 = new javax.swing.JLabel();
        key0 = new javax.swing.JLabel();
        keyminus = new javax.swing.JLabel();
        keyequal = new javax.swing.JLabel();
        keybackspace = new javax.swing.JLabel();
        optionPanel = new javax.swing.JPanel();
        keyscrolllock = new javax.swing.JLabel();
        keyinsert = new javax.swing.JLabel();
        keydelete = new javax.swing.JLabel();
        keyend = new javax.swing.JLabel();
        keyhome = new javax.swing.JLabel();
        keypgdn = new javax.swing.JLabel();
        keypgup = new javax.swing.JLabel();
        copyright = new javax.swing.JLabel();
        keyprtscr = new javax.swing.JLabel();
        jPanelKey1 = new javax.swing.JPanel();
        keytab = new javax.swing.JLabel();
        keyq = new javax.swing.JLabel();
        keyw = new javax.swing.JLabel();
        keye = new javax.swing.JLabel();
        keyr = new javax.swing.JLabel();
        keyt = new javax.swing.JLabel();
        keyy = new javax.swing.JLabel();
        keyu = new javax.swing.JLabel();
        keyi = new javax.swing.JLabel();
        keyo = new javax.swing.JLabel();
        keyp = new javax.swing.JLabel();
        keyopenbigbracket = new javax.swing.JLabel();
        keyclosebigbracket = new javax.swing.JLabel();
        keybslash = new javax.swing.JLabel();
        jPanelKey2 = new javax.swing.JPanel();
        keycaps = new javax.swing.JLabel();
        keya = new javax.swing.JLabel();
        keys = new javax.swing.JLabel();
        keyd = new javax.swing.JLabel();
        keyf = new javax.swing.JLabel();
        keyg = new javax.swing.JLabel();
        keyh = new javax.swing.JLabel();
        keyj = new javax.swing.JLabel();
        keyk = new javax.swing.JLabel();
        keyl = new javax.swing.JLabel();
        keysemicolon = new javax.swing.JLabel();
        keyquote = new javax.swing.JLabel();
        keyenter = new javax.swing.JLabel();
        jPanelKey3 = new javax.swing.JPanel();
        keyshiftl = new javax.swing.JLabel();
        keyz = new javax.swing.JLabel();
        keyx = new javax.swing.JLabel();
        keyc = new javax.swing.JLabel();
        keyv = new javax.swing.JLabel();
        keyb = new javax.swing.JLabel();
        keyn = new javax.swing.JLabel();
        keym = new javax.swing.JLabel();
        keycomma = new javax.swing.JLabel();
        keydot = new javax.swing.JLabel();
        keyfslash = new javax.swing.JLabel();
        keyuparrow = new javax.swing.JLabel();
        keyshiftr = new javax.swing.JLabel();
        jPanelKey4 = new javax.swing.JPanel();
        keyspace = new javax.swing.JLabel();
        keyaltgr = new javax.swing.JLabel();
        keyctrl2 = new javax.swing.JLabel();
        keyleftarrow = new javax.swing.JLabel();
        keydownarrow = new javax.swing.JLabel();
        keyrightarrow = new javax.swing.JLabel();
        keyalt = new javax.swing.JLabel();
        keywin = new javax.swing.JLabel();
        keyfn = new javax.swing.JLabel();
        keyctrl1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("On-Screen Keyboard");
        setAlwaysOnTop(true);
        setAutoRequestFocus(false);
        setBackground(null);
        setFocusable(false);
        setFocusableWindowState(false);
        setUndecorated(true);
        setResizable(false);

        mainPanel.setBackground(new java.awt.Color(0, 0, 0));

        functionPanel.setBackground(new java.awt.Color(0, 0, 0));
        functionPanel.setFocusable(false);
        functionPanel.setOpaque(false);

        keybackquote.setBackground(DEFAULT_KEY_COLOR);
        keybackquote.setFont(DEFAULT_KEY_FONT );
        keybackquote.setForeground(DEFAULT_KEY_FOREGROUND);
        keybackquote.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keybackquote.setText("<html>~<br />&nbsp;&nbsp;`</html>");
        keybackquote.setFocusable(false);
        keybackquote.setMaximumSize(new java.awt.Dimension(50, 50));
        keybackquote.setMinimumSize(new java.awt.Dimension(50, 50));
        keybackquote.setName("0xC0"); // NOI18N
        keybackquote.setOpaque(true);
        keybackquote.setPreferredSize(new java.awt.Dimension(50, 50));
        keybackquote.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        key1.setBackground(DEFAULT_KEY_COLOR);
        key1.setFont(DEFAULT_KEY_FONT );
        key1.setForeground(DEFAULT_KEY_FOREGROUND);
        key1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        key1.setText("<html>!<br />&nbsp;&nbsp;1</html>");
        key1.setFocusable(false);
        key1.setMaximumSize(new java.awt.Dimension(50, 50));
        key1.setMinimumSize(new java.awt.Dimension(50, 50));
        key1.setName("0x31"); // NOI18N
        key1.setOpaque(true);
        key1.setPreferredSize(new java.awt.Dimension(50, 50));
        key1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        key2.setBackground(DEFAULT_KEY_COLOR);
        key2.setFont(DEFAULT_KEY_FONT );
        key2.setForeground(DEFAULT_KEY_FOREGROUND);
        key2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        key2.setText("<html>@<br />&nbsp;&nbsp;2</html>");
        key2.setFocusable(false);
        key2.setMaximumSize(new java.awt.Dimension(50, 50));
        key2.setMinimumSize(new java.awt.Dimension(50, 50));
        key2.setName("0x32"); // NOI18N
        key2.setOpaque(true);
        key2.setPreferredSize(new java.awt.Dimension(50, 50));
        key2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        key3.setBackground(DEFAULT_KEY_COLOR);
        key3.setFont(DEFAULT_KEY_FONT );
        key3.setForeground(DEFAULT_KEY_FOREGROUND);
        key3.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        key3.setText("<html>#<br />&nbsp;&nbsp;3</html>");
        key3.setFocusable(false);
        key3.setMaximumSize(new java.awt.Dimension(50, 50));
        key3.setMinimumSize(new java.awt.Dimension(50, 50));
        key3.setName("0x33"); // NOI18N
        key3.setOpaque(true);
        key3.setPreferredSize(new java.awt.Dimension(50, 50));
        key3.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        key4.setBackground(DEFAULT_KEY_COLOR);
        key4.setFont(DEFAULT_KEY_FONT );
        key4.setForeground(DEFAULT_KEY_FOREGROUND);
        key4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        key4.setText("<html>$<br />&nbsp;&nbsp;4</html>");
        key4.setFocusable(false);
        key4.setMaximumSize(new java.awt.Dimension(50, 50));
        key4.setMinimumSize(new java.awt.Dimension(50, 50));
        key4.setName("0x34"); // NOI18N
        key4.setOpaque(true);
        key4.setPreferredSize(new java.awt.Dimension(50, 50));
        key4.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        key5.setBackground(DEFAULT_KEY_COLOR);
        key5.setFont(DEFAULT_KEY_FONT );
        key5.setForeground(DEFAULT_KEY_FOREGROUND);
        key5.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        key5.setText("<html>%<br />&nbsp;&nbsp;5</html>");
        key5.setFocusable(false);
        key5.setMaximumSize(new java.awt.Dimension(50, 50));
        key5.setMinimumSize(new java.awt.Dimension(50, 50));
        key5.setName("0x35"); // NOI18N
        key5.setOpaque(true);
        key5.setPreferredSize(new java.awt.Dimension(50, 50));
        key5.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        key6.setBackground(DEFAULT_KEY_COLOR);
        key6.setFont(DEFAULT_KEY_FONT );
        key6.setForeground(DEFAULT_KEY_FOREGROUND);
        key6.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        key6.setText("<html>^<br />&nbsp;&nbsp;6</html>");
        key6.setFocusable(false);
        key6.setMaximumSize(new java.awt.Dimension(50, 50));
        key6.setMinimumSize(new java.awt.Dimension(50, 50));
        key6.setName("0x36"); // NOI18N
        key6.setOpaque(true);
        key6.setPreferredSize(new java.awt.Dimension(50, 50));
        key6.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        key7.setBackground(DEFAULT_KEY_COLOR);
        key7.setFont(DEFAULT_KEY_FONT );
        key7.setForeground(DEFAULT_KEY_FOREGROUND);
        key7.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        key7.setText("<html>&<br />&nbsp;&nbsp;7</html>");
        key7.setFocusable(false);
        key7.setMaximumSize(new java.awt.Dimension(50, 50));
        key7.setMinimumSize(new java.awt.Dimension(50, 50));
        key7.setName("0x37"); // NOI18N
        key7.setOpaque(true);
        key7.setPreferredSize(new java.awt.Dimension(50, 50));
        key7.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        key8.setBackground(DEFAULT_KEY_COLOR);
        key8.setFont(DEFAULT_KEY_FONT );
        key8.setForeground(DEFAULT_KEY_FOREGROUND);
        key8.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        key8.setText("<html>*<br />&nbsp;&nbsp;8</html>");
        key8.setFocusable(false);
        key8.setMaximumSize(new java.awt.Dimension(50, 50));
        key8.setMinimumSize(new java.awt.Dimension(50, 50));
        key8.setName("0x38"); // NOI18N
        key8.setOpaque(true);
        key8.setPreferredSize(new java.awt.Dimension(50, 50));
        key8.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        key9.setBackground(DEFAULT_KEY_COLOR);
        key9.setFont(DEFAULT_KEY_FONT );
        key9.setForeground(DEFAULT_KEY_FOREGROUND);
        key9.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        key9.setText("<html>(<br />&nbsp;&nbsp;9</html>");
        key9.setFocusable(false);
        key9.setMaximumSize(new java.awt.Dimension(50, 50));
        key9.setMinimumSize(new java.awt.Dimension(50, 50));
        key9.setName("0x39"); // NOI18N
        key9.setOpaque(true);
        key9.setPreferredSize(new java.awt.Dimension(50, 50));
        key9.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        key0.setBackground(DEFAULT_KEY_COLOR);
        key0.setFont(DEFAULT_KEY_FONT );
        key0.setForeground(DEFAULT_KEY_FOREGROUND);
        key0.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        key0.setText("<html>)<br />&nbsp;&nbsp;0</html>");
        key0.setFocusable(false);
        key0.setMaximumSize(new java.awt.Dimension(50, 50));
        key0.setMinimumSize(new java.awt.Dimension(50, 50));
        key0.setName("0x30"); // NOI18N
        key0.setOpaque(true);
        key0.setPreferredSize(new java.awt.Dimension(50, 50));
        key0.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyminus.setBackground(DEFAULT_KEY_COLOR);
        keyminus.setFont(DEFAULT_KEY_FONT );
        keyminus.setForeground(DEFAULT_KEY_FOREGROUND);
        keyminus.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyminus.setText("<html>_<br />&nbsp;&nbsp;-</html>");
        keyminus.setFocusable(false);
        keyminus.setMaximumSize(new java.awt.Dimension(50, 50));
        keyminus.setMinimumSize(new java.awt.Dimension(50, 50));
        keyminus.setName("0x2D"); // NOI18N
        keyminus.setOpaque(true);
        keyminus.setPreferredSize(new java.awt.Dimension(50, 50));
        keyminus.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyequal.setBackground(DEFAULT_KEY_COLOR);
        keyequal.setFont(DEFAULT_KEY_FONT );
        keyequal.setForeground(DEFAULT_KEY_FOREGROUND);
        keyequal.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyequal.setText("<html>+<br />&nbsp;&nbsp;=</html>");
        keyequal.setFocusable(false);
        keyequal.setMaximumSize(new java.awt.Dimension(50, 50));
        keyequal.setMinimumSize(new java.awt.Dimension(50, 50));
        keyequal.setName("0x3D"); // NOI18N
        keyequal.setOpaque(true);
        keyequal.setPreferredSize(new java.awt.Dimension(50, 50));
        keyequal.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keybackspace.setBackground(DEFAULT_KEY_COLOR);
        keybackspace.setFont(DEFAULT_KEY_FONT_SMALL);
        keybackspace.setForeground(DEFAULT_KEY_FOREGROUND);
        keybackspace.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keybackspace.setText("Backspace");
        keybackspace.setFocusable(false);
        keybackspace.setMaximumSize(new java.awt.Dimension(75, 50));
        keybackspace.setMinimumSize(new java.awt.Dimension(75, 50));
        keybackspace.setName("0x08"); // NOI18N
        keybackspace.setOpaque(true);
        keybackspace.setPreferredSize(new java.awt.Dimension(75, 50));
        keybackspace.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        javax.swing.GroupLayout functionPanelLayout = new javax.swing.GroupLayout(functionPanel);
        functionPanel.setLayout(functionPanelLayout);
        functionPanelLayout.setHorizontalGroup(
            functionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(functionPanelLayout.createSequentialGroup()
                .addComponent(keybackquote, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(key1, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(key2, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(key3, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(key4, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(key5, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(key6, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(key7, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(key8, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(key9, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(key0, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyminus, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyequal, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keybackspace, javax.swing.GroupLayout.PREFERRED_SIZE, 76, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        functionPanelLayout.setVerticalGroup(
            functionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(functionPanelLayout.createSequentialGroup()
                .addGroup(functionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(keybackquote, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(key2, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(key3, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(key4, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(key5, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(key6, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(key7, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(key8, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(key9, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(key0, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyminus, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyequal, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keybackspace, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(key1, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(0, 0, Short.MAX_VALUE))
        );

        optionPanel.setBackground(null);
        optionPanel.setOpaque(false);

        keyscrolllock.setBackground(DEFAULT_KEY_COLOR);
        keyscrolllock.setFont(DEFAULT_KEY_FONT_SMALL);
        keyscrolllock.setForeground(DEFAULT_KEY_FOREGROUND);
        keyscrolllock.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyscrolllock.setText("<html>Scroll<br />Lock</html>");
        keyscrolllock.setFocusable(false);
        keyscrolllock.setMaximumSize(new java.awt.Dimension(50, 50));
        keyscrolllock.setMinimumSize(new java.awt.Dimension(50, 50));
        keyscrolllock.setName("0x91"); // NOI18N
        keyscrolllock.setOpaque(true);
        keyscrolllock.setPreferredSize(new java.awt.Dimension(50, 50));
        keyscrolllock.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyinsert.setBackground(DEFAULT_KEY_COLOR);
        keyinsert.setFont(DEFAULT_KEY_FONT_SMALL);
        keyinsert.setForeground(DEFAULT_KEY_FOREGROUND);
        keyinsert.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyinsert.setText("Insert");
        keyinsert.setFocusable(false);
        keyinsert.setMaximumSize(new java.awt.Dimension(50, 50));
        keyinsert.setMinimumSize(new java.awt.Dimension(50, 50));
        keyinsert.setName("0x9B"); // NOI18N
        keyinsert.setOpaque(true);
        keyinsert.setPreferredSize(new java.awt.Dimension(50, 50));
        keyinsert.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keydelete.setBackground(DEFAULT_KEY_COLOR);
        keydelete.setFont(DEFAULT_KEY_FONT_SMALL);
        keydelete.setForeground(DEFAULT_KEY_FOREGROUND);
        keydelete.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keydelete.setText("Delete");
        keydelete.setFocusable(false);
        keydelete.setMaximumSize(new java.awt.Dimension(50, 50));
        keydelete.setMinimumSize(new java.awt.Dimension(50, 50));
        keydelete.setName("0x7F"); // NOI18N
        keydelete.setOpaque(true);
        keydelete.setPreferredSize(new java.awt.Dimension(50, 50));
        keydelete.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyend.setBackground(DEFAULT_KEY_COLOR);
        keyend.setFont(DEFAULT_KEY_FONT_SMALL);
        keyend.setForeground(DEFAULT_KEY_FOREGROUND);
        keyend.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyend.setText("End");
        keyend.setFocusable(false);
        keyend.setMaximumSize(new java.awt.Dimension(50, 50));
        keyend.setMinimumSize(new java.awt.Dimension(50, 50));
        keyend.setName("0x23"); // NOI18N
        keyend.setOpaque(true);
        keyend.setPreferredSize(new java.awt.Dimension(50, 50));
        keyend.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyhome.setBackground(DEFAULT_KEY_COLOR);
        keyhome.setFont(DEFAULT_KEY_FONT_SMALL);
        keyhome.setForeground(DEFAULT_KEY_FOREGROUND);
        keyhome.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyhome.setText("Home");
        keyhome.setFocusable(false);
        keyhome.setMaximumSize(new java.awt.Dimension(50, 50));
        keyhome.setMinimumSize(new java.awt.Dimension(50, 50));
        keyhome.setName("0x24"); // NOI18N
        keyhome.setOpaque(true);
        keyhome.setPreferredSize(new java.awt.Dimension(50, 50));
        keyhome.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keypgdn.setBackground(DEFAULT_KEY_COLOR);
        keypgdn.setFont(DEFAULT_KEY_FONT_SMALL);
        keypgdn.setForeground(DEFAULT_KEY_FOREGROUND);
        keypgdn.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keypgdn.setText("PgDn");
        keypgdn.setFocusable(false);
        keypgdn.setMaximumSize(new java.awt.Dimension(50, 50));
        keypgdn.setMinimumSize(new java.awt.Dimension(50, 50));
        keypgdn.setName("0x22"); // NOI18N
        keypgdn.setOpaque(true);
        keypgdn.setPreferredSize(new java.awt.Dimension(50, 50));
        keypgdn.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keypgup.setBackground(DEFAULT_KEY_COLOR);
        keypgup.setFont(DEFAULT_KEY_FONT_SMALL);
        keypgup.setForeground(DEFAULT_KEY_FOREGROUND);
        keypgup.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keypgup.setText("PgUP");
        keypgup.setFocusable(false);
        keypgup.setMaximumSize(new java.awt.Dimension(50, 50));
        keypgup.setMinimumSize(new java.awt.Dimension(50, 50));
        keypgup.setName("0x21"); // NOI18N
        keypgup.setOpaque(true);
        keypgup.setPreferredSize(new java.awt.Dimension(50, 50));
        keypgup.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        copyright.setBackground(DEFAULT_KEY_COLOR);
        copyright.setFont(DEFAULT_KEY_FONT);
        copyright.setForeground(DEFAULT_KEY_FOREGROUND);
        copyright.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        copyright.setText("退出");
        copyright.setToolTipText("Developed by Pankaj Prakash");
        copyright.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        copyright.setFocusable(false);
        copyright.setMaximumSize(new java.awt.Dimension(40, 40));
        copyright.setMinimumSize(new java.awt.Dimension(40, 40));
        copyright.setOpaque(true);
        copyright.setPreferredSize(new java.awt.Dimension(40, 40));
        copyright.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                copyrightMouseClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                copyrightkeyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                copyrightkeyMouseExited(evt);
            }
        });

        keyprtscr.setBackground(DEFAULT_KEY_COLOR);
        keyprtscr.setFont(DEFAULT_KEY_FONT_SMALL);
        keyprtscr.setForeground(DEFAULT_KEY_FOREGROUND);
        keyprtscr.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyprtscr.setText("PrtScr");
        keyprtscr.setFocusable(false);
        keyprtscr.setMaximumSize(new java.awt.Dimension(50, 50));
        keyprtscr.setMinimumSize(new java.awt.Dimension(50, 50));
        keyprtscr.setName("0x9A"); // NOI18N
        keyprtscr.setOpaque(true);
        keyprtscr.setPreferredSize(new java.awt.Dimension(50, 50));
        keyprtscr.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        javax.swing.GroupLayout optionPanelLayout = new javax.swing.GroupLayout(optionPanel);
        optionPanel.setLayout(optionPanelLayout);
        optionPanelLayout.setHorizontalGroup(
            optionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(copyright, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(optionPanelLayout.createSequentialGroup()
                .addComponent(keydelete, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyinsert, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGroup(optionPanelLayout.createSequentialGroup()
                .addComponent(keyhome, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyend, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGroup(optionPanelLayout.createSequentialGroup()
                .addComponent(keypgup, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keypgdn, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addGroup(optionPanelLayout.createSequentialGroup()
                .addComponent(keyscrolllock, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyprtscr, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
        optionPanelLayout.setVerticalGroup(
            optionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(optionPanelLayout.createSequentialGroup()
                .addGroup(optionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(keyscrolllock, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyprtscr, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(4, 4, 4)
                .addGroup(optionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(keydelete, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyinsert, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(4, 4, 4)
                .addGroup(optionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(keyhome, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyend, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(4, 4, 4)
                .addGroup(optionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(keypgup, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keypgdn, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(4, 4, 4)
                .addComponent(copyright, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jPanelKey1.setBackground(null);
        jPanelKey1.setOpaque(false);

        keytab.setBackground(DEFAULT_KEY_COLOR);
        keytab.setFont(DEFAULT_KEY_FONT_SMALL);
        keytab.setForeground(DEFAULT_KEY_FOREGROUND);
        keytab.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        keytab.setText(" Tab");
        keytab.setFocusable(false);
        keytab.setMaximumSize(new java.awt.Dimension(60, 40));
        keytab.setMinimumSize(new java.awt.Dimension(60, 40));
        keytab.setName("0x09"); // NOI18N
        keytab.setOpaque(true);
        keytab.setPreferredSize(new java.awt.Dimension(60, 40));
        keytab.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyq.setBackground(DEFAULT_KEY_COLOR);
        keyq.setFont(DEFAULT_KEY_FONT);
        keyq.setForeground(DEFAULT_KEY_FOREGROUND);
        keyq.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyq.setText("q");
        keyq.setFocusable(false);
        keyq.setMaximumSize(new java.awt.Dimension(40, 40));
        keyq.setMinimumSize(new java.awt.Dimension(40, 40));
        keyq.setName("0x51"); // NOI18N
        keyq.setOpaque(true);
        keyq.setPreferredSize(new java.awt.Dimension(40, 40));
        keyq.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyw.setBackground(DEFAULT_KEY_COLOR);
        keyw.setFont(DEFAULT_KEY_FONT);
        keyw.setForeground(DEFAULT_KEY_FOREGROUND);
        keyw.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyw.setText("w");
        keyw.setFocusable(false);
        keyw.setMaximumSize(new java.awt.Dimension(40, 40));
        keyw.setMinimumSize(new java.awt.Dimension(40, 40));
        keyw.setName("0x57"); // NOI18N
        keyw.setOpaque(true);
        keyw.setPreferredSize(new java.awt.Dimension(40, 40));
        keyw.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keye.setBackground(DEFAULT_KEY_COLOR);
        keye.setFont(DEFAULT_KEY_FONT);
        keye.setForeground(DEFAULT_KEY_FOREGROUND);
        keye.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keye.setText("e");
        keye.setFocusable(false);
        keye.setMaximumSize(new java.awt.Dimension(40, 40));
        keye.setMinimumSize(new java.awt.Dimension(40, 40));
        keye.setName("0x45"); // NOI18N
        keye.setOpaque(true);
        keye.setPreferredSize(new java.awt.Dimension(40, 40));
        keye.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyr.setBackground(DEFAULT_KEY_COLOR);
        keyr.setFont(DEFAULT_KEY_FONT);
        keyr.setForeground(DEFAULT_KEY_FOREGROUND);
        keyr.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyr.setText("r");
        keyr.setFocusable(false);
        keyr.setMaximumSize(new java.awt.Dimension(40, 40));
        keyr.setMinimumSize(new java.awt.Dimension(40, 40));
        keyr.setName("0x52"); // NOI18N
        keyr.setOpaque(true);
        keyr.setPreferredSize(new java.awt.Dimension(40, 40));
        keyr.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyt.setBackground(DEFAULT_KEY_COLOR);
        keyt.setFont(DEFAULT_KEY_FONT);
        keyt.setForeground(DEFAULT_KEY_FOREGROUND);
        keyt.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyt.setText("t");
        keyt.setFocusable(false);
        keyt.setMaximumSize(new java.awt.Dimension(40, 40));
        keyt.setMinimumSize(new java.awt.Dimension(40, 40));
        keyt.setName("0x54"); // NOI18N
        keyt.setOpaque(true);
        keyt.setPreferredSize(new java.awt.Dimension(40, 40));
        keyt.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyy.setBackground(DEFAULT_KEY_COLOR);
        keyy.setFont(DEFAULT_KEY_FONT);
        keyy.setForeground(DEFAULT_KEY_FOREGROUND);
        keyy.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyy.setText("y");
        keyy.setFocusable(false);
        keyy.setMaximumSize(new java.awt.Dimension(40, 40));
        keyy.setMinimumSize(new java.awt.Dimension(40, 40));
        keyy.setName("0x59"); // NOI18N
        keyy.setOpaque(true);
        keyy.setPreferredSize(new java.awt.Dimension(40, 40));
        keyy.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyu.setBackground(DEFAULT_KEY_COLOR);
        keyu.setFont(DEFAULT_KEY_FONT);
        keyu.setForeground(DEFAULT_KEY_FOREGROUND);
        keyu.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyu.setText("u");
        keyu.setFocusable(false);
        keyu.setMaximumSize(new java.awt.Dimension(40, 40));
        keyu.setMinimumSize(new java.awt.Dimension(40, 40));
        keyu.setName("0x55"); // NOI18N
        keyu.setOpaque(true);
        keyu.setPreferredSize(new java.awt.Dimension(40, 40));
        keyu.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyi.setBackground(DEFAULT_KEY_COLOR);
        keyi.setFont(DEFAULT_KEY_FONT);
        keyi.setForeground(DEFAULT_KEY_FOREGROUND);
        keyi.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyi.setText("i");
        keyi.setFocusable(false);
        keyi.setMaximumSize(new java.awt.Dimension(40, 40));
        keyi.setMinimumSize(new java.awt.Dimension(40, 40));
        keyi.setName("0x49"); // NOI18N
        keyi.setOpaque(true);
        keyi.setPreferredSize(new java.awt.Dimension(40, 40));
        keyi.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyo.setBackground(DEFAULT_KEY_COLOR);
        keyo.setFont(DEFAULT_KEY_FONT);
        keyo.setForeground(DEFAULT_KEY_FOREGROUND);
        keyo.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyo.setText("o");
        keyo.setFocusable(false);
        keyo.setMaximumSize(new java.awt.Dimension(40, 40));
        keyo.setMinimumSize(new java.awt.Dimension(40, 40));
        keyo.setName("0x4F"); // NOI18N
        keyo.setOpaque(true);
        keyo.setPreferredSize(new java.awt.Dimension(40, 40));
        keyo.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyp.setBackground(DEFAULT_KEY_COLOR);
        keyp.setFont(DEFAULT_KEY_FONT);
        keyp.setForeground(DEFAULT_KEY_FOREGROUND);
        keyp.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyp.setText("p");
        keyp.setFocusable(false);
        keyp.setMaximumSize(new java.awt.Dimension(40, 40));
        keyp.setMinimumSize(new java.awt.Dimension(40, 40));
        keyp.setName("0x50"); // NOI18N
        keyp.setOpaque(true);
        keyp.setPreferredSize(new java.awt.Dimension(40, 40));
        keyp.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyopenbigbracket.setBackground(DEFAULT_KEY_COLOR);
        keyopenbigbracket.setFont(DEFAULT_KEY_FONT);
        keyopenbigbracket.setForeground(DEFAULT_KEY_FOREGROUND);
        keyopenbigbracket.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyopenbigbracket.setText("<html>{<br />&nbsp;&nbsp;[</html>");
        keyopenbigbracket.setFocusable(false);
        keyopenbigbracket.setMaximumSize(new java.awt.Dimension(40, 40));
        keyopenbigbracket.setMinimumSize(new java.awt.Dimension(40, 40));
        keyopenbigbracket.setName("0x5B"); // NOI18N
        keyopenbigbracket.setOpaque(true);
        keyopenbigbracket.setPreferredSize(new java.awt.Dimension(40, 40));
        keyopenbigbracket.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyclosebigbracket.setBackground(DEFAULT_KEY_COLOR);
        keyclosebigbracket.setFont(DEFAULT_KEY_FONT);
        keyclosebigbracket.setForeground(DEFAULT_KEY_FOREGROUND);
        keyclosebigbracket.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyclosebigbracket.setText("<html>}<br />&nbsp;&nbsp;]</html>");
        keyclosebigbracket.setFocusable(false);
        keyclosebigbracket.setMaximumSize(new java.awt.Dimension(40, 40));
        keyclosebigbracket.setMinimumSize(new java.awt.Dimension(40, 40));
        keyclosebigbracket.setName("0x5D"); // NOI18N
        keyclosebigbracket.setOpaque(true);
        keyclosebigbracket.setPreferredSize(new java.awt.Dimension(40, 40));
        keyclosebigbracket.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keybslash.setBackground(DEFAULT_KEY_COLOR);
        keybslash.setFont(DEFAULT_KEY_FONT);
        keybslash.setForeground(DEFAULT_KEY_FOREGROUND);
        keybslash.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keybslash.setText("<html>|<br />&nbsp;&nbsp;\\</html>");
        keybslash.setFocusable(false);
        keybslash.setMaximumSize(new java.awt.Dimension(40, 40));
        keybslash.setMinimumSize(new java.awt.Dimension(40, 40));
        keybslash.setName("0x5C"); // NOI18N
        keybslash.setOpaque(true);
        keybslash.setPreferredSize(new java.awt.Dimension(40, 40));
        keybslash.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        javax.swing.GroupLayout jPanelKey1Layout = new javax.swing.GroupLayout(jPanelKey1);
        jPanelKey1.setLayout(jPanelKey1Layout);
        jPanelKey1Layout.setHorizontalGroup(
            jPanelKey1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelKey1Layout.createSequentialGroup()
                .addGap(0, 0, Short.MAX_VALUE)
                .addComponent(keytab, javax.swing.GroupLayout.PREFERRED_SIZE, 76, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyq, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyw, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keye, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyr, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyt, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyy, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyu, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyi, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyo, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyp, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyopenbigbracket, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyclosebigbracket, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keybslash, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, 0))
        );
        jPanelKey1Layout.setVerticalGroup(
            jPanelKey1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelKey1Layout.createSequentialGroup()
                .addGap(0, 0, Short.MAX_VALUE)
                .addGroup(jPanelKey1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(keytab, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyq, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyw, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keye, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyr, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyt, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyy, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyu, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyi, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyo, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyp, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyopenbigbracket, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyclosebigbracket, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keybslash, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(0, 0, 0))
        );

        jPanelKey2.setBackground(null);
        jPanelKey2.setOpaque(false);

        keycaps.setBackground(DEFAULT_KEY_COLOR);
        keycaps.setFont(DEFAULT_KEY_FONT_SMALL);
        keycaps.setForeground(DEFAULT_KEY_FOREGROUND);
        keycaps.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        keycaps.setText(" CapsLock");
        keycaps.setFocusable(false);
        keycaps.setMaximumSize(new java.awt.Dimension(70, 40));
        keycaps.setMinimumSize(new java.awt.Dimension(70, 40));
        keycaps.setName("0x14"); // NOI18N
        keycaps.setOpaque(true);
        keycaps.setPreferredSize(new java.awt.Dimension(70, 40));
        keycaps.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keya.setBackground(DEFAULT_KEY_COLOR);
        keya.setFont(DEFAULT_KEY_FONT);
        keya.setForeground(DEFAULT_KEY_FOREGROUND);
        keya.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keya.setText("a");
        keya.setFocusable(false);
        keya.setMaximumSize(new java.awt.Dimension(40, 40));
        keya.setMinimumSize(new java.awt.Dimension(40, 40));
        keya.setName("0x41"); // NOI18N
        keya.setOpaque(true);
        keya.setPreferredSize(new java.awt.Dimension(40, 40));
        keya.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keys.setBackground(DEFAULT_KEY_COLOR);
        keys.setFont(DEFAULT_KEY_FONT);
        keys.setForeground(DEFAULT_KEY_FOREGROUND);
        keys.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keys.setText("s");
        keys.setFocusable(false);
        keys.setMaximumSize(new java.awt.Dimension(40, 40));
        keys.setMinimumSize(new java.awt.Dimension(40, 40));
        keys.setName("0x53"); // NOI18N
        keys.setOpaque(true);
        keys.setPreferredSize(new java.awt.Dimension(40, 40));
        keys.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyd.setBackground(DEFAULT_KEY_COLOR);
        keyd.setFont(DEFAULT_KEY_FONT);
        keyd.setForeground(DEFAULT_KEY_FOREGROUND);
        keyd.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyd.setText("d");
        keyd.setFocusable(false);
        keyd.setMaximumSize(new java.awt.Dimension(40, 40));
        keyd.setMinimumSize(new java.awt.Dimension(40, 40));
        keyd.setName("0x44"); // NOI18N
        keyd.setOpaque(true);
        keyd.setPreferredSize(new java.awt.Dimension(40, 40));
        keyd.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyf.setBackground(DEFAULT_KEY_COLOR);
        keyf.setFont(DEFAULT_KEY_FONT);
        keyf.setForeground(DEFAULT_KEY_FOREGROUND);
        keyf.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyf.setText("f");
        keyf.setFocusable(false);
        keyf.setMaximumSize(new java.awt.Dimension(40, 40));
        keyf.setMinimumSize(new java.awt.Dimension(40, 40));
        keyf.setName("0x46"); // NOI18N
        keyf.setOpaque(true);
        keyf.setPreferredSize(new java.awt.Dimension(40, 40));
        keyf.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyg.setBackground(DEFAULT_KEY_COLOR);
        keyg.setFont(DEFAULT_KEY_FONT);
        keyg.setForeground(DEFAULT_KEY_FOREGROUND);
        keyg.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyg.setText("g");
        keyg.setFocusable(false);
        keyg.setMaximumSize(new java.awt.Dimension(40, 40));
        keyg.setMinimumSize(new java.awt.Dimension(40, 40));
        keyg.setName("0x47"); // NOI18N
        keyg.setOpaque(true);
        keyg.setPreferredSize(new java.awt.Dimension(40, 40));
        keyg.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyh.setBackground(DEFAULT_KEY_COLOR);
        keyh.setFont(DEFAULT_KEY_FONT);
        keyh.setForeground(DEFAULT_KEY_FOREGROUND);
        keyh.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyh.setText("h");
        keyh.setFocusable(false);
        keyh.setMaximumSize(new java.awt.Dimension(40, 40));
        keyh.setMinimumSize(new java.awt.Dimension(40, 40));
        keyh.setName("0x48"); // NOI18N
        keyh.setOpaque(true);
        keyh.setPreferredSize(new java.awt.Dimension(40, 40));
        keyh.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyj.setBackground(DEFAULT_KEY_COLOR);
        keyj.setFont(DEFAULT_KEY_FONT);
        keyj.setForeground(DEFAULT_KEY_FOREGROUND);
        keyj.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyj.setText("j");
        keyj.setFocusable(false);
        keyj.setMaximumSize(new java.awt.Dimension(40, 40));
        keyj.setMinimumSize(new java.awt.Dimension(40, 40));
        keyj.setName("0x4A"); // NOI18N
        keyj.setOpaque(true);
        keyj.setPreferredSize(new java.awt.Dimension(40, 40));
        keyj.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyk.setBackground(DEFAULT_KEY_COLOR);
        keyk.setFont(DEFAULT_KEY_FONT);
        keyk.setForeground(DEFAULT_KEY_FOREGROUND);
        keyk.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyk.setText("k");
        keyk.setFocusable(false);
        keyk.setMaximumSize(new java.awt.Dimension(40, 40));
        keyk.setMinimumSize(new java.awt.Dimension(40, 40));
        keyk.setName("0x4B"); // NOI18N
        keyk.setOpaque(true);
        keyk.setPreferredSize(new java.awt.Dimension(40, 40));
        keyk.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyl.setBackground(DEFAULT_KEY_COLOR);
        keyl.setFont(DEFAULT_KEY_FONT);
        keyl.setForeground(DEFAULT_KEY_FOREGROUND);
        keyl.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyl.setText("l");
        keyl.setFocusable(false);
        keyl.setMaximumSize(new java.awt.Dimension(40, 40));
        keyl.setMinimumSize(new java.awt.Dimension(40, 40));
        keyl.setName("0x4C"); // NOI18N
        keyl.setOpaque(true);
        keyl.setPreferredSize(new java.awt.Dimension(40, 40));
        keyl.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keysemicolon.setBackground(DEFAULT_KEY_COLOR);
        keysemicolon.setFont(DEFAULT_KEY_FONT);
        keysemicolon.setForeground(DEFAULT_KEY_FOREGROUND);
        keysemicolon.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keysemicolon.setText("<html>:<br />&nbsp;&nbsp;;</html>");
        keysemicolon.setFocusable(false);
        keysemicolon.setMaximumSize(new java.awt.Dimension(40, 40));
        keysemicolon.setMinimumSize(new java.awt.Dimension(40, 40));
        keysemicolon.setName("0x3B"); // NOI18N
        keysemicolon.setOpaque(true);
        keysemicolon.setPreferredSize(new java.awt.Dimension(40, 40));
        keysemicolon.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyquote.setBackground(DEFAULT_KEY_COLOR);
        keyquote.setFont(DEFAULT_KEY_FONT);
        keyquote.setForeground(DEFAULT_KEY_FOREGROUND);
        keyquote.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyquote.setText("<html>\"<br />&nbsp;&nbsp;'</html>");
        keyquote.setFocusable(false);
        keyquote.setMaximumSize(new java.awt.Dimension(40, 40));
        keyquote.setMinimumSize(new java.awt.Dimension(40, 40));
        keyquote.setName("0xDE"); // NOI18N
        keyquote.setOpaque(true);
        keyquote.setPreferredSize(new java.awt.Dimension(40, 40));
        keyquote.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyenter.setBackground(DEFAULT_KEY_COLOR);
        keyenter.setFont(DEFAULT_KEY_FONT_SMALL);
        keyenter.setForeground(DEFAULT_KEY_FOREGROUND);
        keyenter.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        keyenter.setText("Enter ");
        keyenter.setFocusable(false);
        keyenter.setMaximumSize(new java.awt.Dimension(76, 40));
        keyenter.setMinimumSize(new java.awt.Dimension(76, 40));
        keyenter.setName("0x0A"); // NOI18N
        keyenter.setOpaque(true);
        keyenter.setPreferredSize(new java.awt.Dimension(76, 40));
        keyenter.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        javax.swing.GroupLayout jPanelKey2Layout = new javax.swing.GroupLayout(jPanelKey2);
        jPanelKey2.setLayout(jPanelKey2Layout);
        jPanelKey2Layout.setHorizontalGroup(
            jPanelKey2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelKey2Layout.createSequentialGroup()
                .addGap(0, 0, 0)
                .addComponent(keycaps, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keya, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keys, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyd, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyf, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyg, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyh, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyj, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyk, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyl, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keysemicolon, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyquote, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyenter, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, 0))
        );
        jPanelKey2Layout.setVerticalGroup(
            jPanelKey2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelKey2Layout.createSequentialGroup()
                .addGap(0, 0, 0)
                .addGroup(jPanelKey2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(keycaps, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keya, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keys, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyd, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyf, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyg, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyh, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyj, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyk, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyl, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keysemicolon, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyquote, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyenter, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(0, 0, 0))
        );

        jPanelKey3.setBackground(null);
        jPanelKey3.setOpaque(false);

        keyshiftl.setBackground(DEFAULT_KEY_COLOR);
        keyshiftl.setFont(DEFAULT_KEY_FONT_SMALL);
        keyshiftl.setForeground(DEFAULT_KEY_FOREGROUND);
        keyshiftl.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        keyshiftl.setText(" Shift");
        keyshiftl.setFocusable(false);
        keyshiftl.setMaximumSize(new java.awt.Dimension(87, 40));
        keyshiftl.setMinimumSize(new java.awt.Dimension(87, 40));
        keyshiftl.setName("0x10"); // NOI18N
        keyshiftl.setOpaque(true);
        keyshiftl.setPreferredSize(new java.awt.Dimension(87, 40));
        keyshiftl.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyz.setBackground(DEFAULT_KEY_COLOR);
        keyz.setFont(DEFAULT_KEY_FONT);
        keyz.setForeground(DEFAULT_KEY_FOREGROUND);
        keyz.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyz.setText("z");
        keyz.setFocusable(false);
        keyz.setMaximumSize(new java.awt.Dimension(40, 40));
        keyz.setMinimumSize(new java.awt.Dimension(40, 40));
        keyz.setName("0x5A"); // NOI18N
        keyz.setOpaque(true);
        keyz.setPreferredSize(new java.awt.Dimension(40, 40));
        keyz.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyx.setBackground(DEFAULT_KEY_COLOR);
        keyx.setFont(DEFAULT_KEY_FONT);
        keyx.setForeground(DEFAULT_KEY_FOREGROUND);
        keyx.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyx.setText("x");
        keyx.setFocusable(false);
        keyx.setMaximumSize(new java.awt.Dimension(40, 40));
        keyx.setMinimumSize(new java.awt.Dimension(40, 40));
        keyx.setName("0x58"); // NOI18N
        keyx.setOpaque(true);
        keyx.setPreferredSize(new java.awt.Dimension(40, 40));
        keyx.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyc.setBackground(DEFAULT_KEY_COLOR);
        keyc.setFont(DEFAULT_KEY_FONT);
        keyc.setForeground(DEFAULT_KEY_FOREGROUND);
        keyc.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyc.setText("c");
        keyc.setFocusable(false);
        keyc.setMaximumSize(new java.awt.Dimension(40, 40));
        keyc.setMinimumSize(new java.awt.Dimension(40, 40));
        keyc.setName("0x43"); // NOI18N
        keyc.setOpaque(true);
        keyc.setPreferredSize(new java.awt.Dimension(40, 40));
        keyc.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyv.setBackground(DEFAULT_KEY_COLOR);
        keyv.setFont(DEFAULT_KEY_FONT);
        keyv.setForeground(DEFAULT_KEY_FOREGROUND);
        keyv.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyv.setText("v");
        keyv.setFocusable(false);
        keyv.setMaximumSize(new java.awt.Dimension(40, 40));
        keyv.setMinimumSize(new java.awt.Dimension(40, 40));
        keyv.setName("0x56"); // NOI18N
        keyv.setOpaque(true);
        keyv.setPreferredSize(new java.awt.Dimension(40, 40));
        keyv.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyb.setBackground(DEFAULT_KEY_COLOR);
        keyb.setFont(DEFAULT_KEY_FONT);
        keyb.setForeground(DEFAULT_KEY_FOREGROUND);
        keyb.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyb.setText("b");
        keyb.setFocusable(false);
        keyb.setMaximumSize(new java.awt.Dimension(40, 40));
        keyb.setMinimumSize(new java.awt.Dimension(40, 40));
        keyb.setName("0x42"); // NOI18N
        keyb.setOpaque(true);
        keyb.setPreferredSize(new java.awt.Dimension(40, 40));
        keyb.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyn.setBackground(DEFAULT_KEY_COLOR);
        keyn.setFont(DEFAULT_KEY_FONT);
        keyn.setForeground(DEFAULT_KEY_FOREGROUND);
        keyn.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyn.setText("n");
        keyn.setFocusable(false);
        keyn.setMaximumSize(new java.awt.Dimension(40, 40));
        keyn.setMinimumSize(new java.awt.Dimension(40, 40));
        keyn.setName("0x4E"); // NOI18N
        keyn.setOpaque(true);
        keyn.setPreferredSize(new java.awt.Dimension(40, 40));
        keyn.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keym.setBackground(DEFAULT_KEY_COLOR);
        keym.setFont(DEFAULT_KEY_FONT);
        keym.setForeground(DEFAULT_KEY_FOREGROUND);
        keym.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keym.setText("m");
        keym.setFocusable(false);
        keym.setMaximumSize(new java.awt.Dimension(40, 40));
        keym.setMinimumSize(new java.awt.Dimension(40, 40));
        keym.setName("0x4D"); // NOI18N
        keym.setOpaque(true);
        keym.setPreferredSize(new java.awt.Dimension(40, 40));
        keym.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keycomma.setBackground(DEFAULT_KEY_COLOR);
        keycomma.setFont(DEFAULT_KEY_FONT);
        keycomma.setForeground(DEFAULT_KEY_FOREGROUND);
        keycomma.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keycomma.setText("<html>&lt;<br />&nbsp;&nbsp;,</html>");
        keycomma.setFocusable(false);
        keycomma.setMaximumSize(new java.awt.Dimension(40, 40));
        keycomma.setMinimumSize(new java.awt.Dimension(40, 40));
        keycomma.setName("0x2C"); // NOI18N
        keycomma.setOpaque(true);
        keycomma.setPreferredSize(new java.awt.Dimension(40, 40));
        keycomma.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keydot.setBackground(DEFAULT_KEY_COLOR);
        keydot.setFont(DEFAULT_KEY_FONT);
        keydot.setForeground(DEFAULT_KEY_FOREGROUND);
        keydot.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keydot.setText("<html>&gt;<br />&nbsp;&nbsp;.</html>");
        keydot.setFocusable(false);
        keydot.setMaximumSize(new java.awt.Dimension(40, 40));
        keydot.setMinimumSize(new java.awt.Dimension(40, 40));
        keydot.setName("0x2E"); // NOI18N
        keydot.setOpaque(true);
        keydot.setPreferredSize(new java.awt.Dimension(40, 40));
        keydot.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyfslash.setBackground(DEFAULT_KEY_COLOR);
        keyfslash.setFont(DEFAULT_KEY_FONT);
        keyfslash.setForeground(DEFAULT_KEY_FOREGROUND);
        keyfslash.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyfslash.setText("<html>?<br />&nbsp;&nbsp;/</html>");
        keyfslash.setFocusable(false);
        keyfslash.setMaximumSize(new java.awt.Dimension(40, 40));
        keyfslash.setMinimumSize(new java.awt.Dimension(40, 40));
        keyfslash.setName("0x2F"); // NOI18N
        keyfslash.setOpaque(true);
        keyfslash.setPreferredSize(new java.awt.Dimension(40, 40));
        keyfslash.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyuparrow.setBackground(DEFAULT_KEY_COLOR);
        keyuparrow.setFont(DEFAULT_KEY_FONT_SMALL);
        keyuparrow.setForeground(DEFAULT_KEY_FOREGROUND);
        keyuparrow.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyuparrow.setText("↑");
        keyuparrow.setFocusable(false);
        keyuparrow.setMaximumSize(new java.awt.Dimension(40, 40));
        keyuparrow.setMinimumSize(new java.awt.Dimension(40, 40));
        keyuparrow.setName("0x26"); // NOI18N
        keyuparrow.setOpaque(true);
        keyuparrow.setPreferredSize(new java.awt.Dimension(40, 40));
        keyuparrow.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyshiftr.setBackground(DEFAULT_KEY_COLOR);
        keyshiftr.setFont(DEFAULT_KEY_FONT_SMALL);
        keyshiftr.setForeground(DEFAULT_KEY_FOREGROUND);
        keyshiftr.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        keyshiftr.setText("Shift ");
        keyshiftr.setFocusable(false);
        keyshiftr.setMaximumSize(new java.awt.Dimension(40, 40));
        keyshiftr.setMinimumSize(new java.awt.Dimension(40, 40));
        keyshiftr.setName("0x10"); // NOI18N
        keyshiftr.setOpaque(true);
        keyshiftr.setPreferredSize(new java.awt.Dimension(40, 40));
        keyshiftr.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        javax.swing.GroupLayout jPanelKey3Layout = new javax.swing.GroupLayout(jPanelKey3);
        jPanelKey3.setLayout(jPanelKey3Layout);
        jPanelKey3Layout.setHorizontalGroup(
            jPanelKey3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelKey3Layout.createSequentialGroup()
                .addGap(0, 0, 0)
                .addComponent(keyshiftl, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyz, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyx, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyc, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyv, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyb, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyn, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keym, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keycomma, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keydot, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyfslash, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyuparrow, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyshiftr, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );
        jPanelKey3Layout.setVerticalGroup(
            jPanelKey3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelKey3Layout.createSequentialGroup()
                .addGap(0, 0, Short.MAX_VALUE)
                .addGroup(jPanelKey3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(keyshiftl, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyz, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyx, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyc, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyv, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyb, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyn, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keym, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keycomma, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keydot, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyfslash, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyuparrow, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyshiftr, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(0, 0, 0))
        );

        jPanelKey4.setBackground(new java.awt.Color(0, 0, 0));

        keyspace.setBackground(DEFAULT_KEY_COLOR);
        keyspace.setFont(DEFAULT_KEY_FONT);
        keyspace.setForeground(DEFAULT_KEY_FOREGROUND);
        keyspace.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyspace.setText(" ");
        keyspace.setFocusable(false);
        keyspace.setMaximumSize(new java.awt.Dimension(244, 40));
        keyspace.setMinimumSize(new java.awt.Dimension(244, 40));
        keyspace.setName("0x20"); // NOI18N
        keyspace.setOpaque(true);
        keyspace.setPreferredSize(new java.awt.Dimension(244, 40));
        keyspace.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyaltgr.setBackground(DEFAULT_KEY_COLOR);
        keyaltgr.setFont(DEFAULT_KEY_FONT_SMALL);
        keyaltgr.setForeground(DEFAULT_KEY_FOREGROUND);
        keyaltgr.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyaltgr.setText("AltGr");
        keyaltgr.setFocusable(false);
        keyaltgr.setMaximumSize(new java.awt.Dimension(40, 40));
        keyaltgr.setMinimumSize(new java.awt.Dimension(40, 40));
        keyaltgr.setName("0x12"); // NOI18N
        keyaltgr.setOpaque(true);
        keyaltgr.setPreferredSize(new java.awt.Dimension(40, 40));
        keyaltgr.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyctrl2.setBackground(DEFAULT_KEY_COLOR);
        keyctrl2.setFont(DEFAULT_KEY_FONT_SMALL);
        keyctrl2.setForeground(DEFAULT_KEY_FOREGROUND);
        keyctrl2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyctrl2.setText("Ctrl");
        keyctrl2.setFocusable(false);
        keyctrl2.setMaximumSize(new java.awt.Dimension(40, 40));
        keyctrl2.setMinimumSize(new java.awt.Dimension(40, 40));
        keyctrl2.setName("0x11"); // NOI18N
        keyctrl2.setOpaque(true);
        keyctrl2.setPreferredSize(new java.awt.Dimension(40, 40));
        keyctrl2.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyleftarrow.setBackground(DEFAULT_KEY_COLOR);
        keyleftarrow.setFont(DEFAULT_KEY_FONT_SMALL);
        keyleftarrow.setForeground(DEFAULT_KEY_FOREGROUND);
        keyleftarrow.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyleftarrow.setText("←");
        keyleftarrow.setFocusable(false);
        keyleftarrow.setMaximumSize(new java.awt.Dimension(40, 40));
        keyleftarrow.setMinimumSize(new java.awt.Dimension(40, 40));
        keyleftarrow.setName("0x25"); // NOI18N
        keyleftarrow.setOpaque(true);
        keyleftarrow.setPreferredSize(new java.awt.Dimension(40, 40));
        keyleftarrow.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keydownarrow.setBackground(DEFAULT_KEY_COLOR);
        keydownarrow.setFont(DEFAULT_KEY_FONT_SMALL);
        keydownarrow.setForeground(DEFAULT_KEY_FOREGROUND);
        keydownarrow.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keydownarrow.setText("↓");
        keydownarrow.setFocusable(false);
        keydownarrow.setMaximumSize(new java.awt.Dimension(40, 40));
        keydownarrow.setMinimumSize(new java.awt.Dimension(40, 40));
        keydownarrow.setName("0x28"); // NOI18N
        keydownarrow.setOpaque(true);
        keydownarrow.setPreferredSize(new java.awt.Dimension(40, 40));
        keydownarrow.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyrightarrow.setBackground(DEFAULT_KEY_COLOR);
        keyrightarrow.setFont(DEFAULT_KEY_FONT_SMALL);
        keyrightarrow.setForeground(DEFAULT_KEY_FOREGROUND);
        keyrightarrow.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyrightarrow.setText("→");
        keyrightarrow.setFocusable(false);
        keyrightarrow.setMaximumSize(new java.awt.Dimension(40, 40));
        keyrightarrow.setMinimumSize(new java.awt.Dimension(40, 40));
        keyrightarrow.setName("0x27"); // NOI18N
        keyrightarrow.setOpaque(true);
        keyrightarrow.setPreferredSize(new java.awt.Dimension(40, 40));
        keyrightarrow.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyalt.setBackground(DEFAULT_KEY_COLOR);
        keyalt.setFont(DEFAULT_KEY_FONT_SMALL);
        keyalt.setForeground(DEFAULT_KEY_FOREGROUND);
        keyalt.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyalt.setText("Alt");
        keyalt.setFocusable(false);
        keyalt.setMaximumSize(new java.awt.Dimension(40, 40));
        keyalt.setMinimumSize(new java.awt.Dimension(40, 40));
        keyalt.setName("0x12"); // NOI18N
        keyalt.setOpaque(true);
        keyalt.setPreferredSize(new java.awt.Dimension(40, 40));
        keyalt.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keywin.setBackground(DEFAULT_KEY_COLOR);
        keywin.setFont(DEFAULT_KEY_FONT_SMALL);
        keywin.setForeground(DEFAULT_KEY_FOREGROUND);
        keywin.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keywin.setText("win");
        keywin.setFocusable(false);
        keywin.setName("0x020C"); // NOI18N
        keywin.setOpaque(true);
        keywin.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyfn.setBackground(DEFAULT_KEY_COLOR);
        keyfn.setFont(DEFAULT_KEY_FONT_SMALL);
        keyfn.setForeground(DEFAULT_KEY_FOREGROUND);
        keyfn.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        keyfn.setText("Fn");
        keyfn.setFocusable(false);
        keyfn.setMaximumSize(new java.awt.Dimension(40, 40));
        keyfn.setMinimumSize(new java.awt.Dimension(40, 40));
        keyfn.setName("0xff"); // NOI18N
        keyfn.setOpaque(true);
        keyfn.setPreferredSize(new java.awt.Dimension(40, 40));
        keyfn.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        keyctrl1.setBackground(DEFAULT_KEY_COLOR);
        keyctrl1.setFont(DEFAULT_KEY_FONT_SMALL);
        keyctrl1.setForeground(DEFAULT_KEY_FOREGROUND);
        keyctrl1.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        keyctrl1.setText(" Ctrl");
        keyctrl1.setFocusable(false);
        keyctrl1.setMaximumSize(new java.awt.Dimension(40, 40));
        keyctrl1.setMinimumSize(new java.awt.Dimension(40, 40));
        keyctrl1.setName("0x11"); // NOI18N
        keyctrl1.setOpaque(true);
        keyctrl1.setPreferredSize(new java.awt.Dimension(40, 40));
        keyctrl1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                keyClicked(evt);
            }
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                keyMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                keyMouseExited(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                keyPressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                keyReleased(evt);
            }
        });

        javax.swing.GroupLayout jPanelKey4Layout = new javax.swing.GroupLayout(jPanelKey4);
        jPanelKey4.setLayout(jPanelKey4Layout);
        jPanelKey4Layout.setHorizontalGroup(
            jPanelKey4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelKey4Layout.createSequentialGroup()
                .addGap(0, 0, 0)
                .addComponent(keyctrl1, javax.swing.GroupLayout.PREFERRED_SIZE, 76, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyfn, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keywin, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyalt, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyspace, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGap(4, 4, 4)
                .addComponent(keyaltgr, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyctrl2, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyleftarrow, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keydownarrow, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(keyrightarrow, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, 0))
        );
        jPanelKey4Layout.setVerticalGroup(
            jPanelKey4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelKey4Layout.createSequentialGroup()
                .addGap(0, 0, 0)
                .addGroup(jPanelKey4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(keyctrl1, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyfn, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keywin, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyalt, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyspace, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyaltgr, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyctrl2, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyleftarrow, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keydownarrow, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(keyrightarrow, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(0, 0, 0))
        );

        javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel);
        mainPanel.setLayout(mainPanelLayout);
        mainPanelLayout.setHorizontalGroup(
            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(mainPanelLayout.createSequentialGroup()
                .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(functionPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanelKey1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanelKey2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanelKey3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jPanelKey4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(optionPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, 0))
        );
        mainPanelLayout.setVerticalGroup(
            mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(mainPanelLayout.createSequentialGroup()
                .addComponent(functionPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(jPanelKey1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(jPanelKey2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(jPanelKey3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(jPanelKey4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addComponent(optionPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(mainPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void copyrightkeyMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_copyrightkeyMouseEntered
        // TODO add your handling code here:
        copyright.setBackground(SELECTED_COLOR);
        //copyright.setForeground(new Color(-16732417));
    }//GEN-LAST:event_copyrightkeyMouseEntered

    private void copyrightkeyMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_copyrightkeyMouseExited
        // TODO add your handling code here:
        //copyright.setForeground(Color.GRAY);
        copyright.setBackground(DEFAULT_KEY_COLOR);
    }//GEN-LAST:event_copyrightkeyMouseExited

    private void copyrightMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_copyrightMouseClicked
        // TODO add your handling code here:
        this.setVisible(false);
//        this.dispose();
//        System.exit(0);
//        try {
//            if (Desktop.isDesktopSupported()) {
//                Desktop.getDesktop().browse(new URI("http://www.codeforwin.in/"));
//            } else {
//                throw new UnsupportedOperationException();
//            }
//        } catch (UnsupportedOperationException | IOException | URISyntaxException ex) {
//            JOptionPane.showMessageDialog(this, "Visit - http://www.codeforwin.in/", "Onscreen Keyboard", JOptionPane.INFORMATION_MESSAGE);
//        }
    }//GEN-LAST:event_copyrightMouseClicked
        
    //<editor-fold defaultstate="collapsed" desc="Variable Declarations">
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JLabel copyright;
    private javax.swing.JPanel functionPanel;
    private javax.swing.JPanel jPanelKey1;
    private javax.swing.JPanel jPanelKey2;
    private javax.swing.JPanel jPanelKey3;
    private javax.swing.JPanel jPanelKey4;
    private javax.swing.JLabel key0;
    private javax.swing.JLabel key1;
    private javax.swing.JLabel key2;
    private javax.swing.JLabel key3;
    private javax.swing.JLabel key4;
    private javax.swing.JLabel key5;
    private javax.swing.JLabel key6;
    private javax.swing.JLabel key7;
    private javax.swing.JLabel key8;
    private javax.swing.JLabel key9;
    private javax.swing.JLabel keya;
    private javax.swing.JLabel keyalt;
    private javax.swing.JLabel keyaltgr;
    private javax.swing.JLabel keyb;
    private javax.swing.JLabel keybackquote;
    private javax.swing.JLabel keybackspace;
    private javax.swing.JLabel keybslash;
    private javax.swing.JLabel keyc;
    private javax.swing.JLabel keycaps;
    private javax.swing.JLabel keyclosebigbracket;
    private javax.swing.JLabel keycomma;
    private javax.swing.JLabel keyctrl1;
    private javax.swing.JLabel keyctrl2;
    private javax.swing.JLabel keyd;
    private javax.swing.JLabel keydelete;
    private javax.swing.JLabel keydot;
    private javax.swing.JLabel keydownarrow;
    private javax.swing.JLabel keye;
    private javax.swing.JLabel keyend;
    private javax.swing.JLabel keyenter;
    private javax.swing.JLabel keyequal;
    private javax.swing.JLabel keyf;
    private javax.swing.JLabel keyfn;
    private javax.swing.JLabel keyfslash;
    private javax.swing.JLabel keyg;
    private javax.swing.JLabel keyh;
    private javax.swing.JLabel keyhome;
    private javax.swing.JLabel keyi;
    private javax.swing.JLabel keyinsert;
    private javax.swing.JLabel keyj;
    private javax.swing.JLabel keyk;
    private javax.swing.JLabel keyl;
    private javax.swing.JLabel keyleftarrow;
    private javax.swing.JLabel keym;
    private javax.swing.JLabel keyminus;
    private javax.swing.JLabel keyn;
    private javax.swing.JLabel keyo;
    private javax.swing.JLabel keyopenbigbracket;
    private javax.swing.JLabel keyp;
    private javax.swing.JLabel keypgdn;
    private javax.swing.JLabel keypgup;
    private javax.swing.JLabel keyprtscr;
    private javax.swing.JLabel keyq;
    private javax.swing.JLabel keyquote;
    private javax.swing.JLabel keyr;
    private javax.swing.JLabel keyrightarrow;
    private javax.swing.JLabel keys;
    private javax.swing.JLabel keyscrolllock;
    private javax.swing.JLabel keysemicolon;
    private javax.swing.JLabel keyshiftl;
    private javax.swing.JLabel keyshiftr;
    private javax.swing.JLabel keyspace;
    private javax.swing.JLabel keyt;
    private javax.swing.JLabel keytab;
    private javax.swing.JLabel keyu;
    private javax.swing.JLabel keyuparrow;
    private javax.swing.JLabel keyv;
    private javax.swing.JLabel keyw;
    private javax.swing.JLabel keywin;
    private javax.swing.JLabel keyx;
    private javax.swing.JLabel keyy;
    private javax.swing.JLabel keyz;
    private javax.swing.JPanel mainPanel;
    private javax.swing.JPanel optionPanel;
    // End of variables declaration//GEN-END:variables
}
//</editor-fold>